﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

using MakeIT.MiraPark.Comuns;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static OutraDataVO getOutraData(DateTime data)
        {
            List<OutraDataVO> listOutraDataVOs = getOutraDatas(data);
            if (listOutraDataVOs != null && listOutraDataVOs.Count > 0)
                return listOutraDataVOs[0];
            else
                return null;
        }
        
        public static List<OutraDataVO> getOutraDatas()
        {
            return getOutraDatas(null);
        }
        public static List<OutraDataVO> getOutraDatas(DateTime? dataInicial)
        {
            return getOutraDatas(dataInicial, null);
        }
      
        public static List<OutraDataVO> getOutraDatas(DateTime? dataInicial, DateTime? dataFinal)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdOutraData, OutraDataInicial, OutraDataFinal, HoraInicial, HoraFinal, Motivo ");
            query.AppendLine("FROM outraData ");

            if (dataInicial != null && dataFinal != null)
                query.AppendLine("WHERE ADDTIME(OutraDataInicial, HoraInicial) <= ?DataFinal AND ADDTIME(OutraDataFinal, HoraFinal) >= ?DataInicial ");
            else if (dataInicial != null)
                query.AppendLine("WHERE ?DataInicial BETWEEN ADDTIME(OutraDataInicial, HoraInicial) AND ADDTIME(OutraDataFinal, HoraFinal) ");
            else if (dataFinal != null)
                query.AppendLine("WHERE ?DataFinal BETWEEN ADDTIME(OutraDataInicial, HoraInicial) AND ADDTIME(OutraDataFinal, HoraFinal) ");
            
            query.AppendLine("ORDER BY OutraDataInicial ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (dataInicial != null) cmd.Parameters.AddWithValue("?DataInicial", dataInicial.Value);
            if (dataFinal != null) cmd.Parameters.AddWithValue("?DataFinal", dataFinal.Value);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<OutraDataVO> listOutraData = new List<OutraDataVO>();

                while (reader.Read())
                {
                    OutraDataVO outraDataVO = OutraDataVO.CreateOutraDataVO();
                    outraDataVO.idOutraData = reader.GetInt32("IdOutraData");
                    outraDataVO.outraDataInicial = reader.GetDateTime("OutraDataInicial");
                    outraDataVO.outraDataFinal = reader.GetDateTime("OutraDataFinal");
                    outraDataVO.horaInicial = reader.GetTimeSpan("HoraInicial");
                    outraDataVO.horaFinal = reader.GetTimeSpan("HoraFinal");
                    outraDataVO.motivo = reader.GetString("Motivo");

                    listOutraData.Add(outraDataVO);
                }
                reader.Close();
                return listOutraData;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setOutraData(OutraDataVO outraDataVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE outraData ");
            query.AppendLine("SET OutraDataInicial=?OutraDataInicial, OutraDataFinal=?OutraDataFinal, HoraInicial=?HoraInicial, HoraFinal=?HoraFinal, Motivo=?Motivo ");
            query.AppendLine("WHERE IdOutraData=?IdOutraData ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdOutraData", outraDataVO.idOutraData);
            cmd.Parameters.AddWithValue("?OutraDataInicial", outraDataVO.outraDataInicial);
            cmd.Parameters.AddWithValue("?OutraDataFinal", outraDataVO.outraDataFinal);
            cmd.Parameters.AddWithValue("?HoraInicial", outraDataVO.horaInicial);
            cmd.Parameters.AddWithValue("?HoraFinal", outraDataVO.horaFinal);
            cmd.Parameters.AddWithValue("?Motivo", outraDataVO.motivo);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newOutraData(OutraDataVO outraDataVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO outraData ");
            query.AppendLine("SET IDOutraData=?IdOutraData, OutraDataInicial=?OutraDataInicial, OutraDataFinal=?OutraDataFinal, HoraInicial=?HoraInicial, HoraFinal=?HoraFinal, Motivo=?Motivo ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdOutraData", outraDataVO.idOutraData);
            cmd.Parameters.AddWithValue("?OutraDataInicial", outraDataVO.outraDataInicial);
            cmd.Parameters.AddWithValue("?OutraDataFinal", outraDataVO.outraDataFinal);
            cmd.Parameters.AddWithValue("?HoraInicial", outraDataVO.horaInicial);
            cmd.Parameters.AddWithValue("?HoraFinal", outraDataVO.horaFinal);
            cmd.Parameters.AddWithValue("?Motivo", outraDataVO.motivo);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delOutraData(OutraDataVO outraDataVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM outraData ");
            query.AppendLine("WHERE IdOutraData=?IdOutraData ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdOutraData", outraDataVO.idOutraData);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
